<?php
/**
 * Created by Mauro Gadaleta
 * User: Mauro Gadaleta
 * Date: 28/04/11
 * Time: 12:22
 *
 * La clase Vista Base extiende de la libreria Smarty ( template Engine )
 */
class baseView extends smarty  {

    /**
     * @var 
     */
	private $styles;

    /**
     * @var 
     */
	private $scripts;

    /**
     * @var null
     */
	private $title = null;

    /**
     * @var bool
     */
	private $blankPage = false;

    /**
     * @var
     */
    public $smarty;

    /**
     * @var array
     */
    private $metaTags = array();

    /**
     * Constructor set up
     * @param  $params
     */
	function __construct($params) {
		parent::__construct();

		$this->configureSmarty(DEBUG);
		$this->assign('view',$this);
		$this->setTitle();
		$this->setDefaultStyles();
		$this->setDefaultScripts();
        $this->setLanguage();
        $this->assignAllParams($params);
	}

    /**
     * Devuelve los metatags insertados
     * @return array
     */
    public function getMetaTags() { return $this->metaTags; }

    /**
     * Setea un metatag
     * @param  $name
     * @param  $content
     * @param string $httpEquiv
     * @return void
     */
    protected function setMetaTag($name, $content, $httpEquiv = '') {
        $this->metaTags[] = array(
            'name'      => $name,
            'content'   => $content,
            'http-equiv'=> $httpEquiv
        );
    }

    /**
     * Asigna parametros Ajax
     * @param  $params
     * @return void
     */
    private function assignAjaxParams( $params ) {
        if(!empty($params['controller']->param))
        {
            foreach($params['controller']->param as $name => $value)
            $this->smartyAssign($name, $value);
        }
    }

    /**
     * Asigna parametros
     * @param array $params
     * @return void
     */
    private function assignAllParams($params = array()) {
        foreach($params as $name => $value)
            $this->smartyAssign($name, $value);
    }

    /**
     * clasico Assign de Smarty
     * @param  $variableName
     * @param  $value
     * @return void
     */
    protected function smartyAssign($variableName, $value) { parent::assign($variableName, $value); }

    /**
     * Setea el idioma escojido y carga un archivo de configuración
     * @return void
     */
	private function setLanguage() {
        if(isset($_GET['lang']))
            $_SESSION['language'] = $_GET['lang'];

        if(!is_file(__SRC_PATH.'config/'.$_SESSION['language'].'.conf'))
            $_SESSION['language'] = LANGUAGE_DEFAULT;

        $languageConfigurationFile = $_SESSION['language'].'.conf';
        $this->assign('configLangFile',$languageConfigurationFile);
        $this->configLoad($languageConfigurationFile);
    }

    /**
     * Configuración de Smarty
     * @return void
     */
	private function configureSmarty() {
		$this->setTemplateDir('templates/');
		$this->setConfigDir(__SRC_PATH.'config/');
		$this->setCompileDir(__SRC_PATH.'compile/');
		$this->setCacheDir(__SRC_PATH.'cache/');
		
		if(DEBUG)
			$this->debug_tpl = true;
	}

    /**
     * Setea el titulo de la pagina
     * @param null $title
     * @return void
     */
	public function setTitle($title = null) {
		if(is_null($this->title) && $title==null)
			$title = WEBTITLE;
		$this->assign('webTitle',$title);
	}

    /**
     * Añade un estilo css
     * @param null $href
     * @param null $media
     * @return void
     */
	public function addStyle($href=null,$media=null) { $this->styles[]['href'] = $href; }

    /**
     * Setea los estilos predefinidos de la aplicación
     * @param null $styles
     * @return void
     */
	private function setDefaultStyles($styles=null) { $this->addStyle(WEBTHEME.'/style.css'); }

    /**
     * Devuelve los estilos
     * @return
     */
	public function getStyles() { return $this->styles; }

    /**
     * Añade un script javascript a la aplicación
     * @param null $src
     * @param bool $webPath
     * @return void
     */
	public function addScript($src=null,$webPath=true) { $this->scripts[] = array('src'=>$src,'webpath'=>$webPath); }

    /**
     * Setea los scripts predefinidos de la aplicación
     * @param null $scripts
     * @return void
     */
	private function setDefaultScripts($scripts=null) { $this->addScript('jquery/jquery-'.JQUERY_VERSION.'.js'); }

    /**
     * devuelve todos los scripts
     * @return
     */
	public function getScripts() { return $this->scripts; }

    /**
     * Setea si quieres una pagina en Blanco (BP) o si quieres una pagina con /header/content/content (HCF)
     * @param bool $bool
     * @return void
     */
	public function setBlankPage($bool=false) { $this->blankPage = $bool; }

    /**
     * Devuelve si la pagina es BP o HCF
     * @return bool
     */
	public function getBlankPage() { return $this->blankPage; }

    /**
     * Muestra la aplicación
     * @return void
     */
	public function show() { $this->display('html5document.tpl'); }
}

?>